package org.wzh.three.jvm.oom;

import java.util.ArrayList;
import java.util.List;

/**
 * @author ewanhiz
 * VM Args: -XX:PermSize=10m -XX:MaxPermSize=10m
 */
public class RuntimeConstantPoolOOM {

    /**
     * 在 Java 1.6 及 之前运行.
     * Java 7 常量池移出了方法区,所以会一直执行下去.
     * @param args
     */
    public static void main(String[] args) {
        // 使用 List 保持着常量池引用,避免 Full GC 回收常量池行为
        List<String> list = new ArrayList<String>();
        // 10MB 的 PermSize 在 integer 范围内足够产生 OOM 了
        int i = 0;
        while (true) {
            list.add(String.valueOf(i++).intern());
        }
    }

}
